WSL 中调用图形界面
最近需要在 WSL 上运行一些图形化界面,虽然目前 Windows 11 已经原生支持了 WSLg,但是 Windows 11 自身的诸多 Bug 属实让我不想升级上去,已经升了两次退回两次了。
2022-09-12 更新 WSL2 时遇到的问题
主要问题就在于 WSL2 使用了虚拟网卡,以下的 IP 获取方式可能只能拿到 WSL 的 IP,但是会出现一些问题,比如通信超时【什么错误都没有,但是 Xlaunch 就是没有窗口会弹出来】。具体的问题解决可以看这篇 Stackoverflow
解决方法就是改成这句:
export DISPLAY=$(route.exe print | grep 0.0.0.0 | head -1 | awk '{print $4}'):0.0
步骤【WSL1 可用】
- 在 Windows 上安装 VcXsrv
- 启动 WSL,在
.bashrc
最后一行加入以下命令
export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0
- 使用
apt install x11-apps -y && xeyes
进行测试,如果弹出窗口则成功
PS
- 遇到了奇怪的问题,调用 Pangolin 的时候出现了 Framebuffer 的错误,解决方法参考这里。大概就是:
a. 修改 Pangolin 源码:
~/Pangolin/src/display/device/display_x11.cpp
b. 找到大概 110 行处,将GLXFBConfig* fbc = glXChooseFBConfig(display, DefaultScreen(display), visual_attribs, &fbcount);
改为GLXFBConfig* fbc = glXGetFBConfigs(display, DefaultScreen(display), &fbcount);
c. 重新编译并安装